/*******************************************************************/
/* @ All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.        */
/*                                                                 */
/*  NAME      = test_db2.c                                         */
/*  NOTE      =                                                    */
/*  DATE      = 2016/04/07 by songbb                               */
/*******************************************************************/

#include <stdio.h>
#include <CUnit/Basic.h>

#include "apmtest_cunit.h"
#include "frcomm.h"
#include "frmem.h"
#include "module.h"
#include "frreport_comm.h"
#include "frreport_mng.h"
#include "t_db2_cmd_obj/t_db2_cmd_obj.h"
#include "t_db2_core/t_db2_core.h"
#include "t_db2_froca/t_db2_froca.h"
#include "t_db2_obj/t_db2_obj.h"
#include "t_db2_request/t_db2_request.h"
#include "t_db2_response/t_db2_response.h"
#include <frservice_mng.h>
#include <db2/config.h>

static Frmemstat_mng g_st_memstat_mng={0,FR_MEMSTAT_COUNT_MAX};
static pthread_rwlock_t  g_memstat_rwlock = PTHREAD_RWLOCK_INITIALIZER;
static Frmem_env g_st_mem_env = {&g_st_memstat_mng, &g_memstat_rwlock};

int g_i_flag_run =1;
void *g_p_memstat=NULL;


FR_STATIC Report_module g_st_report_moduleRef = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
ApmContext g_st_apm_context = {NULL, NULL, NULL, NULL, &g_st_report_moduleRef};
void *g_p_apm_context = NULL;

int main(int argc, char **argv)
{
    //if (fr_slab_init(FR_MEM_BUFF_SIZE, MODULE_NAME) == FR_FAIL)
    if (fr_slab_init(&g_st_mem_env, MODULE_NAME) == NULL)
        return FR_FAIL;

    apmtest_cunit_registry();

    FunType fun_suites[1024];
    memset(fun_suites, 0x00, sizeof(fun_suites));
    int i_suites_len = sizeof(fun_suites) / sizeof(FunType);
    int i_loop = 0;

    // 加载各个测试组件
    // db2_cmd_obj
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_get_sqlstt);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_parse_sqldta);

    // t_db2_core
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_chk_cp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_set_analysis_data);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_analysis);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_detect);

    // t_db2_froca
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_1byte_int);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_4byte_float);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_8byte_float);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_fixed_dec);

    // t_db2_obj
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite_db2_get_typdefnam_obj);

    // t_db2_request
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_accrdb);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_accsec);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_clsqry);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_cntqry);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_dscsqlstt);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsat);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsqlimm);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsqlset);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsqlstt);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_opnqry);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_prpsqlstt);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_rdbcmm);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_rdbrllbck);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_secchk);

    // t_db2_response
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_accrdb_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_accsec_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_clsqry_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_cntqry_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_dscsqlstt_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsat_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsqlimm_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsqlset_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_excsqlstt_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_opnqry_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_prpsqlstt_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_rdbcmm_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_rdbrllbck_resp);
    apmtest_cunit_add_suites(fun_suites, i_suites_len, add_suite__db2_parse_secchk_resp);

    for (; i_loop < i_suites_len; i_loop++)
    {
        if (fun_suites[i_loop] != NULL && fun_suites[i_loop]() != 0)
        {
            CU_cleanup_registry();
            return CU_get_error();
        }
    }

    apmtest_cunit_unregistry();

    fr_slab_destroy();

    return 0;
}
